前言

今天我们来详细讨论nginx如何作为静态缓存,并且把自己踩的坑说下.

正文

只能通过重新编译的方式安装

使用nginx做为静态缓存必须要安装ngx_cache_purge模块, 但是这个模块通过yum包安装是不会携带的, 那么就要我们单独安装.

单独安装的话有两种方式, 一种是重新编译, 另一种是动态加载.

我一开始的nginx是使用yum安装的1.8.0版本. 后来发现动态加载的方式只有1.9.1以上的nginx版本才支持. 本来想升级到1.9+版本然后动态加载安装. 后来又发现ngx_cache_purge模块不支持动态加载. 所以只剩下重新编译这一条路了.

只能先升级到1.18.0版本

既然只能重新编译那么我就想不用升级了, 直接重新编译安装吧. 后来发现不升级nginx版本而重新编译安装的话会导致很多最新特性不支持, 比如http2特性. 而且我发现下载的1.8.0源码安装包缺少很多模块, 后来发现这个源码包只有832104大小. 而比较新的1.18.0版本大小又1039530. 所以老版本重新编译安装很麻烦, 缺少各种包. 于是只能升级到1.18.0版本.

升级1.18.0版本过程

卸载1.8.0版本nginx

yum remove nginx

下载rpm源并更新

cd /usr/local/temp 
#下载rpm源
wget http://nginx.org/packages/rhel/7/x86_64/RPMS/nginx-1.18.0-1.el7.ngx.x86_64.rpm
#更新rpm
rpm -Uvh nginx-1.18.0-1.el7.ngx.x86_64.rpm

重新安装1.18.0版本

yum install -y nginx

注意: 这个yum安装的1.18.0版本是不携带ngx_cache_purge模块的

下载1.18.0源码解压和ngx_cache_purge源码解压

cd /usr/local/temp
wget http://nginx.org/download/nginx-1.18.0.tar.gz
tar -xvf nginx-1.18.0.tar.gz
wget http://labs.frickle.com/files/ngx_cache_purge-2.3.tar.gz
tar -xvf ngx_cache_purge-2.3.tar.gz

获取yum安装的nginx配置信息

nginx -V

20201209154047-2021-12-30-09-34-05

根据配置信息重新编译nginx

cd /usr/local/temp/nginx-1.18.0
#配置
./configure <刚刚的配置信息> --add-module=/usr/local/temp/ngx_cache_purge-2.3
#编译
make

备份原来的nginx程序, 并复制刚刚重新编译的nginx程序到执行目录下

mv /usr/sbin/nginx /usr/sbin/nginx.bak
cp /usr/local/temp/nginx-1.18.0/objs/nginx /usr/sbin/nginx

经过上面的步骤, 我们携带ngx_cache_purge模块的1.18.0版本nginx就安装完毕了. 接下来我们配置nginx缓存.

配置缓存

创建缓存文件

#文件夹可以直接指定喜欢的位置
mkdir /etc/nginx/wpCache
mkdir /etc/nginx/wpCache/temp
#让nginx拥有缓存文件夹所有权限,如果嫌麻烦就直接 777
chown -R nginx wpCache

配置nginx.conf文件

#配置缓存的路径, level和keys_zone不知道什么意思, 当1天都没访问时删除, 最大缓存量是1GB
fastcgi_cache_path /etc/nginx/wpCache levels=1:2 keys_zone=WORDPRESS:250m inactive=1d max_size=1G;
fastcgi_temp_path  /etc/nginx/wpCache/temp;
#缓存文件的键, 这个会存储在内存中, 当被命中时, 找到对应的缓存文件返回
fastcgi_cache_key "$scheme$request_method$host$request_uri";
#缓存失效的条件是请求错误, 超时, 不合理的请求头, 服务器500错误
fastcgi_cache_use_stale error timeout invalid_header http_500;
#忽略一切nocache申明,避免不缓存伪静态等
fastcgi_ignore_headers Cache-Control Expires Set-Cookie;

对每个站点的conf文件进行配置, 我就以zixuehu.com作为示例

#开始缓存
set $skip_cache 0;
#post访问不缓存
if ($request_method = POST) {
    set $skip_cache 1;
}  
#动态查询不缓存
if ($query_string != "") {
    set $skip_cache 1;
}  
#后台等特定页面不缓存(其他需求请自行添加即可)
if ($request_uri ~* "/wp-admin/|/xmlrpc.php|wp-.*.php|/feed/|index.php|sitemap(_index)?.xml") {
    set $skip_cache 1;
}
#对登录用户、评论过的用户不展示缓存
if ($http_cookie ~* "comment_author|wordpress_[a-f0-9]+|wp-postpass|wordpress_no_cache|wordpress_logged_in") {
    set $skip_cache 1;
}
#这里请参考你网站之前的配置,特别是sock的路径,弄错了就502了!
location ~ \.php${
    try_files $uri =404;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index   index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params; 
    #新增的缓存规则
    fastcgi_cache_bypass $skip_cache;
    fastcgi_no_cache $skip_cache;
    add_header X-Cache "$upstream_cache_status From $host";
    fastcgi_cache WORDPRESS;
    add_header Cache-Control  max-age=0;
    add_header Nginx-Cache "$upstream_cache_status";
    add_header Last-Modified $date_gmt;
    add_header X-Frame-Options SAMEORIGIN; # 只允许本站用 frame 来嵌套
    add_header X-Content-Type-Options nosniff; # 禁止嗅探文件类型
    add_header X-XSS-Protection "1; mode=block"; # XSS 保护
    etag  on;
    fastcgi_cache_valid 200 301 302 1d;
}
#缓存清理配置(可选),只允许自己站点ip来清理, 禁止其他ip帮我们清理, 当然你也可以不设置
location ~ /purge(/.*) {
    allow 127.0.0.1;
    allow <你网站的真实IP>;
    deny all;
    fastcgi_cache_purge WORDPRESS "$scheme$request_method$host$1";
}

到此为止, 我们的缓存就配置好了, 接下来我们就是要配合wordpress的插件来让站点自动清理缓存了, 否则设置缓存反而适得其反.

配置Nginx Helper插件

这个插件的原理就是当页面发生修改时就删除对应的缓存文件, 比如当修改了某篇文章

20201209172657-2021-12-30-09-34-18 20201209172745-2021-12-30-09-34-28

在wp-config配置文件中配置缓存文件的位置,这样插件就知道去哪里删除了

//根据实际情况定义缓存的存放路径
define( 'RT_WP_NGINX_HELPER_CACHE_PATH','<自己缓存文件的位置>');

测试

fastcgi_cache有三种状态: Miss: 未命中, 一般是第一次请求某个页面的时候 HIT: 命中, 当不是第一次请求的时候请求到了缓存文件 BYPASS: 忽略, 就是我们nginx配置的不需要缓存的文件, 比如后台页面 20201209173620-2021-12-30-09-34-41 20201209173706-2021-12-30-09-34-53 20201209173756-2021-12-30-09-35-19

总结

我们学习了如何使用nginx来实现缓存, 这种缓存对于网站访问速度的提升是非常大的, 因为数据库查询对于网站的访问速度有非常大的拖延。

THE END
推荐文章
  • 黄帝内经-第39篇-举痛论篇(1)

  • 如何开通关闭微信自动续费

  • 主播电脑配置

  • 解决OneDrive错误代码0x8004de44无法登录问题

  • 如何获得搜索流量

  • QQ邮箱开启SMTP

  • 黄帝内经-第41篇-刺腰痛篇(1)

  • docker-compose问题集合

评论 共0条
开启精彩搜索

热门搜索

暂无

历史搜索

用户名/邮箱/手机号
密码
用户名
密码
重复密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
注册
找回密码
邮箱/手机号
验证码
发送验证码
59秒后可重发
新密码
重复密码
请选择支付方式
余额支付

购买将消耗【10

微信支付
微信扫码支付 0 元
[ 04分50秒 ]
请使用微信扫一扫
扫描二维码支付
支付宝支付
支付宝扫码支付 0 元
[ 04分50秒 ]
请使用支付宝扫一扫
扫描二维码支付
已完成支付
未完成支付

请输入验证码

点击验证码可以刷新

你确认吗?

确认

2024年10月1日

0字

0字

2024年10月

0字

新增

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

新增

0字

0字

0字

新增

0字

0字

0字

0字

新增

0字

0字